<?php
// Service web du projet Réservations M2L
// Ecrit le 06/10/2014 par Loisance Emmanuel

// Ce service web permet à un administrateur authentifié d'enregistrer un nouvel utilisateur
// et fournit un compte-rendu d'exécution

// Le service web doit être appelé avec 5 paramètres : nomAdmin, mdpAdmin, name, mdp, numReservation
// http://<hébergeur>AnnulerReservation.php?name=&mdp=&numreservation=
// Les paramètres peuvent être passés par la méthode POST (à privilégier en exploitation pour la confidentialité des données) :
// http://<hébergeur>/ConfirmerReservation.php


// déclaration des variables globales pour pouvoir les utiliser aussi dans les fonctions
global $doc;
global $name, $level, $password, $email;
global $ADR_MAIL_EMETTEUR;

// inclusion des paramètres et de la bibliothèque de fonctions ("include_once" peut être remplacé par "require_once")
include_once ('_inc_parametres.php');
include_once ('_inc_fonctions_boite_a_outils.php');

// crée une instance de DOMdocument
$doc = new DOMDocument();

// specifie la version et le type d'encodage
$doc->version = '1.0';
$doc->encoding = 'ISO-8859-1';

// crée un commentaire et l'encode en ISO
$elt_commentaire = $doc->createComment('Service web AnnulerRéservation - BTS SIO - Lycée De La Salle - Rennes');
// place ce commentaire à la racine du document XML
$doc->appendChild($elt_commentaire);



// Récupération des données transmises
// la fonction $_GET récupère une donnée passée en paramètre dans l'URL par la méthode GET
if ( empty ($_GET ["nomAdmin"]) == true)  $nomAdmin = "";  else   $nomAdmin = $_GET ["nomAdmin"];
if ( empty ($_GET ["mdpAdmin"]) == true)  $mdpAdmin = "";  else   $mdpAdmin = $_GET ["mdpAdmin"];
if ( empty ($_GET ["name"]) == true)  $name = "";  else   $name = $_GET ["name"];
if ( empty ($_GET ["mdp"]) == true)  $mdp = "";  else   $mdp = $_GET ["mdp"];
if ( empty ($_GET ["numreservation"]) == true)  $numreservation = "";  else   $numreservation = $_GET ["numreservation"];

// si l'URL ne contient pas les données, on regarde si elles ont été envoyées par la méthode POST
// la fonction $_POST récupère une donnée envoyées par la méthode POST
if ( $nomAdmin == "" && $mdpAdmin == "" && $name == "" && $level == "" && $email == "" )
{
	if ( empty ($_POST ["nomAdmin"]) == true)  $nomAdmin = "";  else   $nomAdmin = $_POST ["nomAdmin"];
	if ( empty ($_POST ["mdpAdmin"]) == true)  $mdpAdmin = "";  else   $mdpAdmin = $_POST ["mdpAdmin"];
	if ( empty ($_POST ["name"]) == true)  $name = "";  else   $name = $_POST ["name"];
	if ( empty ($_POST ["mdp"]) == true)  $mdp = "";  else   $mdp = $_POST ["mdp"];
	if ( empty ($_POST ["numreservation"]) == true)  $numreservation = "";  else   $numreservation = $_POST ["numreservation"];
}


// 1 - Vérifier que les données transmises sont complètes et sous une forme correcte.
if ($name == "" || $mdp == "" || $numreservation == "" )
{
	TraitementAnormal ("Erreur : données incomplètes ou incorrectes.");
}
else
{
	include_once ('_inc_connexion.php');
	include_once ('_inc_fonctions_bdd_reservations.php');
	
	// 2 - Vérifier l'authentification de l'utilisateur
	if (estIdentifie($name, $mdp) == "inconnu")
	{
		TraitementAnormal("Erreur : authentification incorrecte.");
	}
	else
	{
		// 3 - Vérifier l'existence du numéro de réservation.
		if(!existeReservation($numreservation))
		{
			TraitementAnormal("Erreur : Ce numéro de réservation n'existe pas.");
		}
		else
		{
			// 4 - Vérifier que l'utilisateur est bien l'auteur de la réservation.
			if(!estLeCreateur($name, $numreservation))
			{
				TraitementAnormal("Erreur : L'utilisateur n'est pas l'auteur de la réservation.");
			}
			else
			{
				// 5 - Vérifier que la date de début de réservation est bien supérieure à la date du jour.
				if(dateDebutReservation($numreservation) < time())
				{
					TraitementAnormal("Erreur : date de début de réservation inférieur à la date du jour.");
				}
				else
				{
					annulerReservation($numreservation);
					TraitementNormal();
				}
			}
		}
	}
}




// Mise en forme finale
$doc->formatOutput = true;
// renvoie le contenu XML
echo $doc->saveXML();
// fin du programme
exit;





// fonction de traitement des cas anormaux
function TraitementAnormal($msg)
{
	// redéclaration des données globales utilisées dans la fonction
	global $doc;

	// crée l'élément 'data' à la racine du document XML
	$elt_data = $doc->createElement('data');
	$doc->appendChild($elt_data);

	// place l'élément 'reponse' juste après l'élément 'data'
	$elt_reponse = $doc->createElement('reponse', $msg);
	$elt_data->appendChild($elt_reponse);

	return;
}




// fonction de traitement des cas normaux
function TraitementNormal()
{
	// redéclaration des données globales utilisées dans la fonction
	global $doc;
	global $name, $level, $password, $email;
	global $ADR_MAIL_EMETTEUR;

	$email = emailUtilisateur($name);

	// envoie un mail de confirmation de l'enregistrement
	$sujet = "Confirmation de la suppression de votre réservation de salle !";
	$message = "Salle supprimée \n\n";

	$ok = envoyerMail ($email, $sujet, $message, $ADR_MAIL_EMETTEUR);
	if ( $ok )
		$msg = "Suppression effectuée.";
	else
		$msg = "Suppression effectuée ; l'envoi du mail à l'utilisateur a rencontré un problème.";


	// crée l'élément 'data' à la racine du document XML
	$elt_data = $doc->createElement('data');
	$doc->appendChild($elt_data);
	// place l'élément 'reponse' juste après l'élément 'data'
	$elt_reponse = $doc->createElement('reponse', $msg);
	$elt_data->appendChild($elt_reponse);

	return;
}



